Julia - Obrada slike - Geomterijske transformacije

In [2]:
#U okviru ovog notebook-a daćemo prikaz rada osnovnih algoritama za geometrijske transformacije and slikama
In [ ]:
#Za obradu slika pomoću geometrijskih transformacija biće nam potreban paket ImageTransformations

import Pkg;
Pkg.add("ImageTransformations");
In [3]:
using ImageTransformations
In [7]:
using TestImages, FileIO, Images
In [8]:
img = load("gfilt.jpg");
mosaicview(img)
Out[8]:
In [14]:
#Ključne funkcije u ovom paketu jesu funkcije za menjanje razmere (veličine slike), rotiranje slike, uvijanje slike

#Pre svega, demonstriraćemo rad funkcije za menjanje razmere:

rez_sl1 = imresize(img, ratio=1/2);  #prvi argukment funkcije imresize() jeste slika nad kojom vršimo obradu, 
                # a drugi argument predsavlja odnos dužina slike po x i y nove slike naspram stare:
                # u prevodu, ukoliko se odlučimo za osnos 1/a, onća ćemo skratiti sliku a puta po x i a puta po y osi

mosaicview(img, rez_sl1; nrow = 1)
Out[14]:
In [15]:
size(img)
Out[15]:
(190, 178)
In [16]:
size(rez_sl1)
Out[16]:
(95, 89)
In [17]:
#Kao što možemo videti, skraćivanje se vrši tako što se smanji broj 
#piksela naše slike onoliko puta koliko mi to želimo
In [ ]:
#Potrebno je da sada instaliramo još dva paketa: Rotations i CoordinateTransformations:
Pkg.add("Rotations");
Pkg.add("CoordinateTransformations");
In [30]:
#Sada ćemo obraditi funkciju warp

#Ova funkcija će za cilj imati uvijanje slike oko neke izabrane tačke primenom neke transformacije
using Rotations, CoordinateTransformations

img = load("gfilt.jpg");
c = recenter(RotMatrix(-1/4*pi), center(img));
#funkcija recenter() kao prvi argument prima transformaciju koju želimo da izvršimo
#nad našom slikom i tačku oko koje želimo da vršimo datu transformaciju
rez_sl2 = warp(img, c); 
#nakon toga funkcija warp vrši željenu transformaciju nad datom slikom - kao prvi
#argument prima se sama slika, a kao drugi argument 
mosaicview(img, rez_sl2; nrow = 1)
                                             
#Naravno, moguće je i definisati drugačiji vid transformacije npr. perspektivne transformacije
#pa zato ova funkcija warp predstavlja svojevrsno uopštenje koordinatnih operacija transformacija slika
Out[30]:
In [28]:
#Konačno, daćemo još osnovni prikaz funkcije za rotitanje slike imrotate
img = load("gfilt.jpg");
rez_sl3 = imrotate(img, pi/3); #kao prvi argument prima se slika, a kao drugi ugao za koju želimo da izvršimo
                               #njenu rotaciju u smeru kazaljke na časovniku oko njenih centralnih piksela
mosaicview(img, rez_sl3; nrow = 1)
Out[28]:
In [ ]: